package com.cucn.ingmall.ware.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.cucn.common.to.mq.OrderTO;
import com.cucn.common.to.mq.StockLockedTO;
import com.cucn.common.utils.PageUtils;
import com.cucn.ingmall.ware.dto.LockStockResult;
import com.cucn.ingmall.ware.entity.WareSkuEntity;
import com.cucn.common.to.SkuHasStockVO;
import com.cucn.ingmall.ware.vo.WareSkuLockDTO;

import java.util.List;
import java.util.Map;

/**
 * 商品库存
 *
 * @author kouchaojie
 * @email kou1688@foxmail.com
 * @date 2021-11-17 18:35:22
 */
public interface WareSkuService extends IService<WareSkuEntity> {

    PageUtils queryPage(Map<String, Object> params);

    /**
     * 将采购人员采购的商品入库
     *
     * @param skuId  skuId
     * @param wareId 仓库id
     * @param skuNum sku的数量
     */
    void addStock(Long skuId, Long wareId, Integer skuNum);

    /**
     * 判断sku是否有库存
     *
     * @param skuIds skuId集合
     * @return sku库存vo对象集合
     */
    List<SkuHasStockVO> getSkusHasStock(List<Long> skuIds);

    /**
     * 锁定库存
     *
     * @param wareSkuLockDTO 需锁定的库存信息
     * @return 返回每个商品锁定库存成功与否的信息
     */
    boolean orderLockSkuWare(WareSkuLockDTO wareSkuLockDTO);

    /**
     * 库存过期消息解锁库存方法
     */
    void unLockStock(StockLockedTO stockLockedTO);

    /**
     * 订单关单消息解锁库存方法
     *
     * @param orderTO
     */
    void unLockStock(OrderTO orderTO);
}

